import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.*;
/**
 * Clase que sirve para que este objeto se mueva y verifique si choco con un zombie.
 * 
 * @author Héctor Nicolás Anguiano Huerta.
 * @version 30 de Noviembre de 2012.
 */
public class Bala extends Actor
{
    private Exterminador ex;//Variable que hace referencia al objeto Exterminador.
    private int x;//Posicion actual en x de la bala.
    private int y;//Posicion actual en x de la bala.
    private int d;//Variable que indica la dirección de la bala.
    private int cont=0;//Variable que sirve para saber cuantas balas tocaron a los zombies.
    Zombieland mundo=(Zombieland)super.getWorld();
    /**
     *Constructor de la clase Bala.
     *@param dir Direccion a la cual se movera la bala. 0 a la derecha y 1 a la izquierda.
     */
    public Bala(int dir)
    {
        d=dir;
    }
    
    /**
     * Metodo que utiliza otros para realizar el comportamiento de este objeto 
     * e incrementa el contador de las balas que tocan a los zombies.
     */
    public void act()
    {
        mueve();
        cont++;
    }
    
    /**
     * Metodo que sirve para hacer que la bala se mueva y desaparezca al llegar al borde del mundo.
     */
    void mueve()
    {
        int x=getX();
        int y=getY();
        Zombieland mundo=(Zombieland)getWorld();
        if(x>0 && y>0 && x<mundo.getWidth()-5)
        {
            if(!impacta())
            {
                if( d==1 )
                {
                    setImage("Bala2.png");
                    setLocation(x-10,y);
                }
                if( d==0 )
                {
                    //setImage("Bala.png");
                    setLocation(x+10,y);
                }
            }
        }
        else
            getWorld().removeObject(this); 
    }
    
    /**
     * Metodo que checa si la bala toco a un zombie
     * @return true si toco a un zombie o false si no lo hizo.
     */
    public boolean impacta()
    {
        int aux=0;
        Actor jackson, nerd, music, nator, thor, vader, ext;
        jackson=super.getOneObjectAtOffset(0,0,ZombieJackson.class);
        nerd=super.getOneObjectAtOffset(0,0,ZombieNerd.class);
        music=super.getOneObjectAtOffset(0,0,ZombieMusic.class);
        nator=super.getOneObjectAtOffset(0,0,Zombienator.class);
        thor=super.getOneObjectAtOffset(0,0,ZombieThor.class);
        vader=super.getOneObjectAtOffset(0,0,ZombieVader.class);
        Zombieland mundo=(Zombieland)super.getWorld();
        Letrero msj;
        if( jackson!=null|| nerd!=null  || music!=null || nator!=null || thor!=null || vader!=null)
        {
            if(cont==10)
            {
                getWorld().removeObject(jackson);
                getWorld().removeObject(this);
                mundo.sumaPunto();
            }
            if(cont==15)
            {
                getWorld().removeObject(nerd);
                getWorld().removeObject(this);
                mundo.sumaPunto();
                aux=1;
            }
            if(cont==20)
            {
                getWorld().removeObject(music);
                getWorld().removeObject(this);
                mundo.sumaPunto();
                aux=1;
            }
            if(cont==25)
            {
                getWorld().removeObject(nator);
                getWorld().removeObject(this);
                mundo.sumaPunto();
                aux=1;
            }
            if(cont==30)
            {
                getWorld().removeObject(thor);
                getWorld().removeObject(this);
                mundo.sumaPunto();
                aux=1;
            }
            if(cont==50)
            {
                getWorld().removeObject(vader);
                getWorld().removeObject(this);
                mundo.sumaPunto();
                aux=1;
            }
        }
        if(aux==1)
            return true;
        else
            return false;
    }
}